package view

import (
	"AppBigDevops/src/common"
	"AppBigDevops/src/models"
	"github.com/gin-gonic/gin"
	"github.com/go-playground/validator/v10"
)

func UserLogin(c *gin.Context) {

	// 校验一下 用户账号密码  json字段
	var user models.UserLoginRequest

	err := c.ShouldBindJSON(&user)

	// 这里是判断json 解析是否有问题
	// {
	//    "k1":"v1",
	//}'
	// 报错如下
	//{
	//    "code": 7,
	//    "result": {},
	//    "message": "invalid character '}' looking for beginning of object key string",
	//    "type": ""
	//}
	if err != nil {
		common.FailWithMessage(err.Error(), c)
		return
	}

	// 在这里校验字段，是否必填，范围是否正确
	err = validate.Struct(user)
	if err != nil {
		// 直接返回
		//common.FailWithMessage(err.Error(), c)
		//return

		// 翻译后返回

		// 这里为什么要判断错误是否是 ValidationErrors
		// errors.Translate
		if errors, ok := err.(validator.ValidationErrors); ok {
			common.ReqBadFailWithWithDetailed(

				gin.H{
					"翻译前": err.Error(),
					"翻译后": errors.Translate(trans),
				},
				"请求出错",
				c,
			)
			return
		}
	}

	// 假设账号密码验证通过
	dbUser := &models.User{
		Username: user.Username,
		Password: user.Password,
	}

	models.TokenNext(dbUser, c)

	return

}

// 登录后获取用户信息，来自于jwt的header
func getUserInfoAfterLogin(c *gin.Context) {

	// 拿到用户的userClaims

	jwtClaim := c.MustGet(common.GIN_CTX_JWT_CLAIM).(*models.UserCustomClaims)

	common.OkWithDetailed(jwtClaim.User, "ok", c)
}
